package 逆波兰表达式求值;

import java.util.Stack;

class Solution {
    //这个方法用来判断字符串s是否为运算符"+","-","*","/".
    public boolean isOperation(String s){
        if (s.equals("+") || s.equals("-") || s.equals("*") || s.equals("/")){
            return true;
        }
        return false;
    }
    public int evalRPN(String[] tokens) {
        Stack<Integer> stack = new Stack<>();
        //此循环的大致逻辑是将字符串数组中的每个元素依次取出来
        //存放到字符串s中实现遍历数组的操作
        for (String s :tokens) {
            //判断是不是运算符,如果是操作数就入栈
            if (!isOperation(s)){
                //方法Integer.parseInt(s);是将字符串s转为整数
                stack.push(Integer.parseInt(s));
            }else {
                //是运算符就将从栈中依次取两个元素,
                //取出的第一个元素num2作为右操作数
                int num2 = stack.pop();
                //再取出的元素num1作为左操作数
                int num1 = stack.pop();
                //利用switch语句进行判断是哪种运算符
                //进行相关运算后将结果重新入栈
                switch (s){
                    case "+":
                        stack.push(num1+num2);
                        break;
                    case "-":
                        stack.push(num1-num2);
                        break;
                    case "*":
                        stack.push(num1*num2);
                        break;
                    case "/":
                        stack.push(num1/num2);
                        break;
                }
            }
        }
        //最后栈中元素就是逆波兰表达式的结果,直接返回
        return stack.pop();
    }
}